/*

	funciones.prg
	Definicion de funciones comunes a varios procesos
	
*/

import "mod_say";

CONST

	// cantidad de textos visibles por printf
	textDebugMax = 40;	

	// formatos de printf
	_NORMAL 	= 0;
	_ERROR 		= 1;
	_OK 		= 2;
	_IMPORTANT 	= 3;
END


GLOBAL
	//variables para printf
	textDebug = -1;				// numero del texto (para arrancar en el 0)
	textDebugCounter = 0;		// contador de textos, para mostrar al comienzo de la linea
	textDebugID[textDebugMax];	// ids de todos los textos escritos
END

//---------------------------------------------------------------------------------------
FUNCTION print(string text)
//
// llama a la funcion printf con color _NORMAL
//
BEGIN

	printf(text, _NORMAL);
	
	return 0;
	
END

//---------------------------------------------------------------------------------------
FUNCTION  printf(string text, int format)
//
//"consolita", mandas un text de parametro y lo imprime al costado de la pantalla
//
PRIVATE
	int color;
END
BEGIN

	// solo se ejecuta si esta en modo debug
	IF ( DEBUGMODE )
		
		textDebug++;

		// establece los los colores
		SWITCH ( format )
			CASE _NORMAL:
				color = rgb(255,255,255);
			END
			CASE _ERROR:
				color = rgb(180,0,0);
			END
			CASE _OK:
				color = rgb(0,100,0);
			END
			CASE _IMPORTANT:
				color = rgb(255,255,0);
			END
		END
		// cambia el color de escritura
		set_text_color(color);
		
	
		// limpia la pantalla al llegar al maximo
		IF(textDebug >= textDebugMax)
			for ( textDebug = 0; textDebug < textDebugMax; textDebug++ )
				if ( textDebugID[textDebug] <> 0 )
					delete_text( textDebugID[textDebug] );
				end
			end
			textDebug = 0;
		END

		// imprime el texto guardando su id
		textDebugID[textDebug] = write(0, SCREEN_X - 10, textDebug * 10, 2, text);
		say(text);
		
		// restablece el color de escritura
		set_text_color(rgb(255,255,255));
		
		// aumenta el contador de textos
		textDebugCounter++;
		
		
	END
	
	return 0;
	
END

//---------------------------------------------------------------------------------------
PROCESS varMonitor(x, y, string tag, int pointer var)
//
// Muestra una variable en pantalla
// Actualiza el valor a cada frame
//
PRIVATE
	textID;
END

BEGIN
	IF ( DEBUGMODE )
		LOOP
		
			// muestra el valor
			textID = write(0,x,y,3,tag + ": " + *var);
			
			frame;
			
			// borra el texto
			delete_text(textID);
		END
	END
ONEXIT
	IF ( textid )
		delete_text(textID);
	END
END

